

package edu.java.homework.hw07.test0606;


//Neka sa dadeni klasovete A, B, C, kato B naslediava A, C naslediava B.
//Vseki ot klasovete realizira metoda
//void doIt();
//Kak metoda doIt() realiziran v A mozhe da byde izvikan pri izpylnenie
//na metoda doIt() ot C. Posochete, koi ot predlozhenite otgovori
//sa verni i zashto :

class A{
    public void doIt(){
	System.out.println("A.doIt()");
    }  
}

class B extends A{
    public void doIt(){
	System.out.println("B.doIt()");
	// other solution (step1)
	super.doIt();
    }
    
    // my realization
    public void wrapperDoIt(){
	super.doIt();
    }
}

class C extends B{
    public void doIt(){
	System.out.println("C.doIt()");
	// other solution (step 2)
	super.doIt();
	
//		doIt();			// (a)
//		super.doIt();		// (b)
//		super.super.doIt();	// (c)
//		this.super.doIt()	// (d)
//		A.this.doIt();		// (e)
//		((A)this).doIt();	// (f)
//		//ne e vyzmozhno	// (g)
		
		super.wrapperDoIt();    // (h) my realization
    }
}

public class Test0606{
   public static void main(String[] args) {
     C c= new C();
     c.doIt();
   }
}

//Kak metoda doIt() realiziran v A mozhe da byde izvikan pri izpylnenie
//na metoda doIt() ot C.

//(a)   грешка, рекурсия завършваща с overFlowException
//(b)   грешка, вика метода на класа В
//(c)   грешка, неправилна употреба на super
//(d)   грешка, не може така да се използват this и super
//(e)   грешка, не може така да се вика метода doIt() на класа A. Той не е static 
//(f)   грешка, рекурсия, която вика самия метод doIt() на класа С. Завършваща с overFlowException